package com.health.tools;

import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.health.viewscontrols.NovaApplication;
import com.health.R;
import com.health.db.FDbManager;
import com.health.tablebean.BD_DD_INFO;
import com.health.tablebean.BD_ORGANIZE_EMPLOYEE;
import com.health.view.spinner.NiceSpinner;
import com.health.widget.EditTextWithDate;
import com.nova.ActivityManager;
import com.nova.view.NovaTextDialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.graphics.Color;
import android.media.MediaPlayer;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Environment;
import android.os.Vibrator;
import android.provider.Settings;
import android.sax.StartElementListener;
import android.text.Editable;
import android.text.InputFilter;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.CharacterStyle;
import android.text.style.ForegroundColorSpan;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast;

/**
 * 公共变量
 */
public class GlobalConts {
    /**
     * 数据库存储位置
     */
    public static final String TYPE_DBFILENAME = "/EhrApp";
    /**
     * 家庭医生
     */
    public static final String TYPE_JTYS = "TYPE_JTYS";
    /**
     * 国家基本公共卫生
     */
    public static final String TYPE_GJJBGGWS = "TYPE_GJJBGGWS";
    public static final String SHAREPREFRENCE_NAME = "share_health";

    public static final String SIGN_FILENAME_FOLDER = "/PublicHealth/Sign";// 签约时图片存储位置


    // 公卫测试服务器
    // public static final String URL_POST =
    // "http://119.188.126.62:8086/ehr/";//
    // public static final String URL_POST_UPDATE = "http://apis.wo100.com.cn/";
    // http://znjtysapi.ideallife.wang:8082/api/app/jtys/nova/version?type=jt_1&ptype=3
    public static final String URL_POST_UPDATE = "http://znjtysapi.ideallife.wang:8082/";
    /** -------------------服务接口接口地址------------------- */
    /** 公卫正式服务器 **/
    // public static final String URL_POST = "http://nbphsc.wo100.com.cn/ehr/";
    /**
     * 全国通用地址
     */
//	public static final String URL_POST_SHANXIN_ADDRESS = "http://60.208.57.82:8087/novaInt/";
//	public static final String URL_POST_SHANXIN_ADDRESS = "http://123.57.238.120:8087/novaInt/";
//    public saddHypertensiontatic final String URL_POST_SHANXIN_ADDRESS = "http://ggws.guantangyiliao.com/dataInit/";
//        public static final String URL_POST_SHANXIN_ADDRESS = "http://111.175.89.10:8087/novaInt/";
//        public static final String URL_POST_SHANXIN_ADDRESS = "http://192.168.1.132:8181/";
        public static final String URL_POST_SHANXIN_ADDRESS = "http://36.108.162.250:8181/";//新疆
//        public static final String URL_POST_SHANXIN_ADDRESS = "http://11.18.175.52:8181/";//文东
//        public static final String URL_POST_SHANXIN_ADDRESS = "http://106.14.191.138:8181/";//云服务器
        public static final String URL_SHOUQUAN_ADDRESS = "http://ehrapi.yidehealthy.com/";
//        public static final String URL_POST_SHANXIN_ADDRESS = "http://106.14.191.138:8181/";
//    public static final String URL_POST_SHANXIN_ADDRESS = "http://192.168.88.223:8088/novaInt/";
    public String URL_POST = TextUtils.isEmpty(SPUtil.getSTR_UPLOAD_ADDRESS(NovaApplication.getInstance()))
            ? URL_POST_SHANXIN_ADDRESS : SPUtil.getSTR_UPLOAD_ADDRESS(NovaApplication.getInstance());

    public static String getUrlPost() {
        Log.e("GlobalConts--getUrlPost","tt"+NovaApplication.updateUrl);
        if (TextUtils.isEmpty(NovaApplication.updateUrl)) {
            Log.e("Global --getUrlPost1","tt2"+SPUtil.getSTR_UPLOAD_ADDRESS(NovaApplication.getInstance()));
            Log.e("Global --getUrlPost2","tt2"+URL_POST_SHANXIN_ADDRESS);

            return TextUtils.isEmpty(SPUtil.getSTR_UPLOAD_ADDRESS(NovaApplication.getInstance()))
                    ? URL_POST_SHANXIN_ADDRESS : SPUtil.getSTR_UPLOAD_ADDRESS(NovaApplication.getInstance());
        } else {
            return NovaApplication.updateUrl;
        }
        // return
        // TextUtils.isEmpty(SPUtil.getSTR_UPLOAD_ADDRESS(NovaApplication.getInstance()))
        // ? URL_POST_SHANXIN_ADDRESS :
        // SPUtil.getSTR_UPLOAD_ADDRESS(NovaApplication.getInstance());
    }
    public static String getShouquanUrlPost() {
        Log.e("GlobalConts--getUrlPost","tt"+NovaApplication.updateShouquanUrl);
        if (TextUtils.isEmpty(NovaApplication.updateShouquanUrl)) {
            Log.e("Global --getUrlPost1","tt2"+SPUtil.getStrShouquanAddress(NovaApplication.getInstance()));
            Log.e("Global --getUrlPost2","tt2"+URL_SHOUQUAN_ADDRESS);

            return TextUtils.isEmpty(SPUtil.getStrShouquanAddress(NovaApplication.getInstance()))
                    ? URL_SHOUQUAN_ADDRESS : SPUtil.getStrShouquanAddress(NovaApplication.getInstance());
        } else {
            return NovaApplication.updateShouquanUrl;
        }
    }

    /**
     * 居民健康电子卡
     */
    public static final String URL_JMDZJKK_WEBSERVICE = "";// http://qhwjw.gov.cn:8088/
    public String URL_JMDZJKK = TextUtils.isEmpty(SPUtil.getSTR_DZJMJKK_ADDRESS(NovaApplication.getInstance()))
            ? URL_JMDZJKK_WEBSERVICE : SPUtil.getSTR_DZJMJKK_ADDRESS(NovaApplication.getInstance());

    public static String getUrlJMDZJKK() {
        if (TextUtils.isEmpty(NovaApplication.str_dzjmjkk_url)) {
            return TextUtils.isEmpty(SPUtil.getSTR_DZJMJKK_ADDRESS(NovaApplication.getInstance()))
                    ? URL_JMDZJKK_WEBSERVICE : SPUtil.getSTR_DZJMJKK_ADDRESS(NovaApplication.getInstance());
        } else {
            return NovaApplication.str_dzjmjkk_url;
        }
    }
    /** 甘肃省 兰州市 城关区 团结新村街道社区卫生服务中心2017-11-20 10:10:20 **/
    // public static final String URL_POST =
    // "http://118.190.114.57:8082/novaInt/";
    // 业务系统 http://118.190.114.57:8080/ehr
    // 管理系统 http://118.190.114.57:8081/brs
    // 接口系统 http://118.190.114.57:8082/novaInt un001259 abc123
    /** 旬阳地址 */
    // public static final String URL_POST =
    // "http://118.190.115.166:8080/ehr/";
    /** 正式地址（青海内网） */
    // public static final String URL_POST = "http://130.130.51.87:9096/ehr/";//
    /** 西安交大 */
    // public static final String URL_POST =
    // "http://1.85.45.234:8084/brs/";
    /** 测试地址1马连科 */
    // public static final String URL_POST =
    // "http://192.168.1.103:8080/ehr/";
    /** 测试地址2王敏 */
    // public static final String URL_POST =
    // "http://192.168.1.104:8080/ehr/";
    /** 测试地址3张情剑 */
    // public static final String URL_POST =
    // "http://192.168.10.146:8080/ehr/";
    /** 诺安测试?? */
    // public static final String URL_POST = "http://115.28.244.36:8086/ehr/";//
    /** 测试地址 */
    // public static final String URL_POST = "http://192.168.10.155:8080/ehr/";
    /** 测试地址 */
    // public static final String URL_POST = "http://192.168.88.98:8080/ehr/";//
    /** -------------------服务接口接口地址end------------------- **/

    // public static final String URL_POST_PORT = "1.85.45.234";//
    /**
     * ftp上传端口号
     */
    public static final String URL_POST_PORT = "118.190.66.36";//
    // public static final String URL_POST_PORT = "115.28.244.36";//
    public static final String URL_POST_HELP = "doc/nova_remote_ecg_help.pdf";

    public static final String IMG_FOLDERS = "/PublicHealth/images";
    public static final String FILES_FOLDER = "/PublicHealth/DownloadFiles/";
    public static final String FILES_FOLDER_JTYS = "/NovaJTYS/LogFiles/";

    public static final String CE_LIANG_FILE = "/PublicHealth/.nomedia/";
    public static final String CE_LIANG_ECG_FILE = "/PublicHealth/.nomedia/ecg/";
    public static final String MENU_SETTINGS = "settings";

    /**
     * 初始化文件路径
     */
    public static void initPath() {
        try {
            if (!new File(Environment.getExternalStorageDirectory() + GlobalConts.IMG_FOLDERS).exists()) {
                new File(Environment.getExternalStorageDirectory() + GlobalConts.IMG_FOLDERS).mkdirs();
            }
            if (!new File(Environment.getExternalStorageDirectory() + "/PublicHealth/DownloadFiles").exists()) {
                new File(Environment.getExternalStorageDirectory() + "/PublicHealth/DownloadFiles").mkdirs();
            }
            if (!new File(Environment.getExternalStorageDirectory() + "/NovaJTYS/LogFiles").exists()) {
                new File(Environment.getExternalStorageDirectory() + "/NovaJTYS/LogFiles").mkdirs();


            }
            File file=null;
            try {
                file = new File(Environment.getExternalStorageDirectory() + "/NovaJTYS/LogFiles/Log.txt");
                if (!file.exists()) {
                    file.createNewFile();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            if (!new File(Environment.getExternalStorageDirectory() + "/PublicHealth/.nomedia").exists()) {
                new File(Environment.getExternalStorageDirectory() + "/PublicHealth/.nomedia").mkdirs();
            }
            if (!new File(Environment.getExternalStorageDirectory() + "/PublicHealth/.nomedia/ecg").exists()) {
                new File(Environment.getExternalStorageDirectory() + "/PublicHealth/.nomedia/ecg").mkdirs();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * photo_flag circle圆形/rect方形
     */
    public static String photo_flag = "circle";

    public static final int RequestXueya = 0;
    public static final int RequestTizhong = 1;
    public static final int RequestXuetang = 2;
    public static final int RequestXueyang = 3;
    public static final int RequestTiwen = 4;
    public static final int RequestXueHongDanbai = 5;
    public static final int RequestNiaoChangGui = 6;
    public static final int RequestMaiLv = 7;
    public static final int RequestECG = 8;
    public static final int RequestXinLv = 9;
    /**
     * 胆固醇
     */
    public static final int RequestDGC = 11;

    private static NovaTextDialog textDialog;
    public static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    public static SimpleDateFormat datetimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public static SimpleDateFormat datetimeFormat1 = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");
    public static final String LOG_TXT = "log.txt";

    /**
     * 设置文本框最大位数
     *
     * @param length
     * @param editTexts
     */
    public static void setMaxLength(int length, EditText... editTexts) {
        try {
            InputFilter[] filters = {new InputFilter.LengthFilter(length)};
            if (editTexts != null) {
                for (EditText editText : editTexts) {
                    if (editText != null) {
                        editText.setFilters(filters);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 数字类型 number[5,2]
     *
     * @param max       可输入数字最大值
     * @param num       最多几位小数
     * @param editTexts
     */
    public static void setNumMaxLength(double max, int num, EditText... editTexts) {

        InputFilter[] filters = {new InputFilter.LengthFilter(String.valueOf(max).length() + num + 1)};// 999.99
        if (editTexts != null) {
            for (EditText editText : editTexts) {
                if (editText != null) {
                    editText.setFilters(filters);
                    editText.addTextChangedListener(new TextWatcher() {

                        @Override
                        public void onTextChanged(CharSequence s, int start, int before, int count) {
                            // TODO Auto-generated method stub

                        }

                        @Override
                        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                            // TODO Auto-generated method stub

                        }

                        @Override
                        public void afterTextChanged(Editable s) {
                            // TODO Auto-generated method stub

                        }
                    });

                }
            }
        }
    }

    /**
     * 设置文本框最大字节数
     *
     * @param length
     * @param editTexts
     */
    public static void setInputLength(int length, EditText... editTexts) {
        InputFilter[] filters = {new InputFilter.LengthFilter(9)};
        if (editTexts != null) {
            for (EditText editText : editTexts) {
                editText.setFilters(filters);
            }
        }
    }

    /**
     * 网络是否存在
     */
    public static boolean isNetworkAvailable(Context cnt) {
        Context context = cnt.getApplicationContext();
        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity == null) {

            return false;
        } else {
            // if (isWifiConnected(cnt)) {
            // return Network(cnt);
            // }
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null) {
                for (int i = 0; i < info.length; i++) {
                    if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    /**
     * 获取身体质量指数
     *
     * @param height 身高(米)
     * @param weight 体重(公斤)
     * @return BMI
     * @author 鹿云龙
     * @date 2016年1月14日 上午9:13:31
     */
    public static double getBMI(double height, double weight) {

        try {
            weight = Math.floor(weight * 10) / 10;
            // java运算,体重指数(BMI)=体重(kg)/身高(m)2 怎
            double bmi = (weight / (height * height));
            DecimalFormat df = new DecimalFormat("#.0");
            String format = df.format(bmi);
            return Double.parseDouble(format);
        } catch (NumberFormatException e) {
            e.printStackTrace();
            return 0.0;
        }
    }

    /**
     * 处理历史数据，只显示1位小数
     * @param bmi
     * @return
     */
    public static String getFormattedBMI(String bmi) {
        try {
            // 将原始字符串转换为BigDecimal
            BigDecimal originalBMI = new BigDecimal(bmi);

            // 设置保留一位小数的格式
            BigDecimal formattedBMI = originalBMI.setScale(1, BigDecimal.ROUND_HALF_UP);

            // 返回格式化后的字符串
            return formattedBMI.toString();
        } catch (NumberFormatException e) {
            // 如果BMI值不是有效数字，返回原始值
            return bmi;
        }
    }

    /**
     * 判断时间是否在时间段内
     *
     * @param date
     *            当前时间 yyyy-MM-dd HH:mm:ss
     * @param strDateBegin
     *            开始时间 00:00:00
     * @param strDateEnd
     *            结束时间 00:05:00
     * @return
     */
    // public static boolean isInDate(Date date, Date strDateBegin,
    // Date strDateEnd) {
    // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    // String strDate = sdf.format(date);
    // // 截取当前时间时分秒
    // int strDateH = Integer.parseInt(strDate.substring(11, 13));
    // int strDateM = Integer.parseInt(strDate.substring(14, 16));
    // int strDateS = Integer.parseInt(strDate.substring(17, 19));
    // // 截取开始时间时分秒
    // int strDateBeginH = Integer.parseInt(strDateBegin.substring(0, 2));
    // int strDateBeginM = Integer.parseInt(strDateBegin.substring(3, 5));
    // int strDateBeginS = Integer.parseInt(strDateBegin.substring(6, 8));
    // // 截取结束时间时分秒
    // int strDateEndH = Integer.parseInt(strDateEnd.substring(0, 2));
    // int strDateEndM = Integer.parseInt(strDateEnd.substring(3, 5));
    // int strDateEndS = Integer.parseInt(strDateEnd.substring(6, 8));
    // if ((strDateH >= strDateBeginH && strDateH <= strDateEndH)) {
    // // 当前时间小时数在开始时间和结束时间小时数之间
    // if (strDateH > strDateBeginH && strDateH < strDateEndH) {
    // return true;
    // // 当前时间小时数等于开始时间小时数，分钟数在开始和结束之间
    // } else if (strDateH == strDateBeginH && strDateM >= strDateBeginM
    // && strDateM <= strDateEndM) {
    // return true;
    // // 当前时间小时数等于开始时间小时数，分钟数等于开始时间分钟数，秒数在开始和结束之间
    // } else if (strDateH == strDateBeginH && strDateM == strDateBeginM
    // && strDateS >= strDateBeginS && strDateS <= strDateEndS) {
    // return true;
    // }
    // // 当前时间小时数大等于开始时间小时数，等于结束时间小时数，分钟数小等于结束时间分钟数
    // else if (strDateH >= strDateBeginH && strDateH == strDateEndH
    // && strDateM <= strDateEndM) {
    // return true;
    // // 当前时间小时数大等于开始时间小时数，等于结束时间小时数，分钟数等于结束时间分钟数，秒数小等于结束时间秒数
    // } else if (strDateH >= strDateBeginH && strDateH == strDateEndH
    // && strDateM == strDateEndM && strDateS <= strDateEndS) {
    // return true;
    // } else {
    // return false;
    // }
    // } else {
    // return false;
    // }
    // }

    /**
     * 获取网络状态
     *
     * @return boolean 网络状态 true为网络状态良好，false为网络状态不好
     */
    public static boolean Network(Context cnt) {
        WifiManager wifi_service = (WifiManager) cnt.getSystemService(cnt.WIFI_SERVICE);
        WifiInfo wifiInfo = wifi_service.getConnectionInfo();
        // wifiInfo.getBSSID();
        // wifiInfo.getSSID();
        // wifiInfo.getIpAddress();// 获取IP地址。
        // wifiInfo.getMacAddress();// 获取MAC地址。
        // wifiInfo.getNetworkId();// 获取网络ID。
        // wifiInfo.getLinkSpeed();// 获取连接速度，可以让用户获知这一信息。
        int rssi = wifiInfo.getRssi();// 获取信号强度
        if (rssi < -80) {
            return false;
        } else {
            return true;
        }
    }

    /**
     * 是否链接wifi
     *
     * @param context
     * @return
     */
    public static boolean isWifiConnected(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo wifiNetworkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        if (wifiNetworkInfo.isConnected()) {
            return true;
        }
        return false;
    }

    /**
     * 是否是正确的手机号
     *
     * @param mobiles
     * @return
     * @author 王婷婷
     * @date 2017年3月23日 下午4:15:31
     */
    public static boolean isMobileNO(String mobiles) {
        /**
         * 电信 中国电信手机号码开头数字 133、153、180、181、189、177、173、149 联通 中国联通手机号码开头数字
         * 130、131、132、155、156、145、185、186、176、175 移动 中国移动手机号码开头数字
         * 1340-1348、135、136、137、138、139、150、151、152、157、158、159、182、183、184、187
         * 、188、147、178 补充 14号段以前为上网卡专属号段，如中国联通的是145，中国移动的是147等等。
         * 虚拟运营商：170[1700/1701/1702(电信)、1703/1705/1706(移动)、1704/1707/1708/1709(
         * 联通)]、171（联通） 卫星通信 1349 170/171/173/175/176/177/178
         * /^((1[3,5,8][0-9])|(14[5,7])|(17[0,6,7,8]))\d{8}$/
         */
        Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0-9])|(14[5,7])|(17[0,1,3,5-8]))\\d{8}$");
        Matcher m = p.matcher(mobiles);

        return m.matches();
    }

    /**
     * 是否是正确的手机号或者座机
     *
     * @param phoneNumber
     * @return
     */

//    public static boolean isPhoneNumberValid(String phoneNumber) {
//        boolean isValid = false;
//        String expression = "((^((0\\d{2,3})-)(\\d{7,8})(-(\\d{3,}))?$)|(^((13[0-9])|(15[^4,\\D])|(18[0-9])|(14[5,7])|(17[0,1,3,5-8]))\\d{8}$))";
//        CharSequence inputStr = phoneNumber;
//        Pattern pattern = Pattern.compile(expression);
//        Matcher matcher = pattern.matcher(inputStr);
//        if (matcher.matches()) {
//            isValid = true;
//        }
//        return isValid;
//    }

    public static boolean isPhoneNumberValid(String phoneNumber) {
        boolean isValid = false;
        String expression = "^((13[0-9])|(15[^4,\\D])|(14[0,1-9])|(18[0,1-9])|(17[0,1-9]))\\d{8}$"
                +"||"+"^\\d{3}-?\\d{3}-?\\d{4}|\\d{3}-?\\d{3}-?\\d{4}&"
                +"||"+"^\\d{4}-?\\d{8}|\\d{4}-?\\d{8}&"
                +"||"+"^\\d{4}-?\\d{7}|\\d{4}-?\\d{7}&"
                +"||"+"^\\d{3}-?\\d{7}|\\d{4}-?\\d{7}&"
                +"||"+"^\\d{3}-?\\d{8}|\\d{4}-?\\d{8}&";



        CharSequence inputStr = phoneNumber;
        Pattern pattern = Pattern.compile(expression);
        Matcher matcher = pattern.matcher(inputStr);
        if (matcher.matches()) {
            isValid = true;
            System.out.println(isValid);
        }else{
            System.out.println(isValid);
        }
        return isValid;
    }



    /**
     * 固定电话验证带区号
     *
     * @param phoneNumber
     * @return
     * @author 王婷婷
     * @date 2017年3月24日 上午9:44:41
     */
    public static boolean isTelValid(String phoneNumber) {
        boolean isValid = false;
        // String
        // expression="((^(\\d{2,4}[-_－—]?)?\\d{3,8}([-_－—]+\\d{3,8})?([-_－—]+\\d{1,7})?$)|(^0?1[35]\\d{9}$))";
        String expression = "((^((0\\d{2,3})-)(\\d{7,8})(-(\\d{3,}))?$))";
        CharSequence inputStr = phoneNumber;
        Pattern pattern = Pattern.compile(expression);
        Matcher matcher = pattern.matcher(inputStr);
        if (matcher.matches()) {
            isValid = true;
        }
        return isValid;
    }

    // 验证邮政编码
    public static boolean checkPost(String post) {
        if (post.matches("[1-9]\\d{5}(?!\\d)")) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 替换 html中换行符、空格
     */
    public String repText(String str) throws Exception {
        String r = null;
        r = str.replaceAll("<br/>", "\n");
        r = r.replaceAll("&nbsp;", " ");

        return r;
    }

    /**
     * 正则表达式验证特殊字符及符号 进行编号的认证
     */
    public static boolean isSpecialSymbols(String str_content) {

        String regTitle = "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~！@#￥%……&*（）——+|{}【】‘；：”“’。，、？]";
        Pattern p = Pattern.compile(regTitle);
        Matcher m = p.matcher(str_content);
        if (m.find()) {
            return false;
        } else {
            return true;
        }
    }

    /**
     * 去除字符串中的空格\\s*,回车\n,换行符\r,制表符\t
     */
    public void isReplaceStr(String str_content) {
        Pattern p = Pattern.compile("\\s*|\t|\r|\n");
        p.matcher(str_content);

    }

    /***
     * 比较两个日期的大小
     *
     * @param sdate
     * @param edate
     * @return if(sdate < edate){return true;}elase{return false;}
     * @author 鹿云龙
     * @date 2016年1月21日 上午9:07:26
     */
    public static boolean compareDate(Date sdate, Date edate) {
        try {
            if (sdate.getTime() < edate.getTime()) {
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return true;
        }
    }

    /**
     * 计算日期，加或减去指定的时间量
     *
     * @param date 要计算的日期
     * @param i    加或减去指定的天数
     * @return
     * @author 鹿云龙
     * @date 2016年1月21日 下午2:15:57
     */
    public static Date getDate(Date date, int i) {
        Calendar calendar = Calendar.getInstance(); // 得到日历
        calendar.setTime(date);// 把当前时间赋给日历
        calendar.add(Calendar.DAY_OF_MONTH, i);
        date = calendar.getTime();
        return date;
    }

    /**
     * 比较时间大小
     *
     * @param stime
     * @param etime
     * @return
     */
    public static boolean comparedate(String stime, String etime) {
        // Log.w("bi333333333---------", "" + stime + "\n" + etime);
        java.text.DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd");
        java.util.Calendar c1 = java.util.Calendar.getInstance();
        java.util.Calendar c2 = java.util.Calendar.getInstance();

        try {
            c1.setTime(df.parse(stime));
            c2.setTime(df.parse(etime));

        } catch (java.text.ParseException e) {
            System.err.println("格式不正确");
            return false;
        }
        int result = c1.compareTo(c2);
        // Log.w("bijiaojieguo-----------", "" + result);
        if (result <= 0) {
            return false;
        } else {
            return true;
        }

    }

    /**
     * 判断相差时间
     *
     * @return
     * @author 王婷婷
     * @date 2015年12月12日 上午11:02:16
     */
    public static int getAge(Date bornTime) {
        int age = -1;
        try {
            // bornDate = (Date) dateFormat.parse(bornTime);
            java.util.Calendar born = java.util.Calendar.getInstance();
            java.util.Calendar now = java.util.Calendar.getInstance();
            if (bornTime != null) {
                // born.setTime(bornDate);
                born.setTime(bornTime);
                now.setTime(new Date());
                age = now.get(Calendar.YEAR) - born.get(Calendar.YEAR);
                if (now.get(Calendar.DAY_OF_YEAR) < born.get(Calendar.DAY_OF_YEAR)) {
                    age -= 1;
                }
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return age;

    }

    // 判断sd卡的照片文件是不是存在
    public static boolean fileIsExists(String filepath) {
        File f = new File(filepath);
        if (!f.exists()) {
            return false;
        }
        return true;
    }

    public static ProgressDialog showProgress(Context ctx, String msg) {
        // , "请稍等...", "数据正在获取中..."
        ProgressDialog dialog = ProgressDialog.show(ctx, "请稍等", msg, true);
        return dialog;
    }

    public static void showToast(Context context, String message) {
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
    }

    /**
     * 获取10位时间戳
     *
     * @return
     */
    public static String getTimestamp() {
//        long l = new Date().getTime();
        long l = System.currentTimeMillis();
        return (String.valueOf(l)).substring(0, 10);
    }

    /**
     * @param res   原字符串
     * @param str   要插入的字符串
     * @param index 插入位置
     * @return
     */
    public static String stringinsert1(String res, String str, int index) {
        return res.substring(0, index) + str + res.substring(index + 1, res.length());
    }

    public static int getRandomInt() {
        return 0;
    }

    /**
     * 生成min->max之间的数,最小生成的随机数为min，最大生成的随机数为max
     *
     * @param min 最小随机数
     * @param max 最大随机数
     */
    public static int getRandomNum(int min, int max) {

        int i = 0;
        while (true) {
            Random rdm = new Random();

            i = rdm.nextInt(max - min + 1) + min;
            if (i <= max && i >= min) {
                i = rdm.nextInt(max - min + 1) + min;
                return i;
            }
        }
    }

    private static float cm = 0;

    public static void setPixal(DisplayMetrics dm) {
        cm = (float) (dm.xdpi / 2.54); // 单位都是pixal
    }

    public static float getPixal() {
        return cm;
    }

    /**
     * 随机获取true或false
     *
     * @return
     */
    public static boolean getRandom() {
        int i = (int) (Math.random() * 10);
        // System.out.println(i);
        if (i == 0) {
            return true;
        } else if (i % 2 == 0) {
            return true;
        }
        return false;
    }

    // /**
    // * 生成min->max之间的数,最小生成的随机数为min，最大生成的随机数为max
    // *
    // * @param min
    // * 最小随机数
    // * @param max
    // * 最大随机数
    // * */
    // public static double getRandomNum2(int min, int max) {
    // return Math.round(Math.random() * (max - min)) + min;
    // }

    /**
     * 带有\n换行符的字符串都可以用此方法显示2种颜色
     *
     * @param text
     * @param color1
     * @param color2
     * @return
     */
    public static SpannableStringBuilder highlight(String text, int color1, int color2, int fontSize) {
        SpannableStringBuilder spannable = new SpannableStringBuilder(text);// 用于可变字符串
        CharacterStyle span_0 = null, span_1 = null, span_2;
        int end = text.indexOf("\n");
        if (end == -1) {// 如果没有换行符就使用第一种颜色显示
            span_0 = new ForegroundColorSpan(color1);
            spannable.setSpan(span_0, 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        } else {
            span_0 = new ForegroundColorSpan(color1);
            span_1 = new ForegroundColorSpan(color2);
            spannable.setSpan(span_0, 0, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            spannable.setSpan(span_1, end + 1, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

            span_2 = new AbsoluteSizeSpan(fontSize);// 字体大小
            spannable.setSpan(span_2, end + 1, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        return spannable;
    }

    /**
     * 播放系统提示音
     *
     * @param context
     * @throws IllegalArgumentException
     * @throws SecurityException
     * @throws IllegalStateException
     * @throws IOException
     * @author 鹿云龙
     * @date 2015年8月8日 上午11:21:18
     */
    public static void soundRing(Context context, AssetManager assetManager)
            throws IllegalArgumentException, SecurityException, IllegalStateException, IOException {
        MediaPlayer mp = new MediaPlayer();
        mp.reset();
        AssetFileDescriptor afd = assetManager.openFd("2.mp3");
        mp.setDataSource(afd.getFileDescriptor());
        mp.prepare();
        mp.start();

        Vibrator vv = (Vibrator) context.getSystemService(Service.VIBRATOR_SERVICE);
        vv.vibrate(1000);// 震1秒钟
    }

    /**
     * @功能描述: 去除空格
     */
    public static String trimWhitespace(String str) {
        CharSequence cstr = (CharSequence) str;
        boolean hasLength = (cstr != null && cstr.length() > 0);
        if (!hasLength) {
            return str;
        }
        StringBuilder sb = new StringBuilder(str);
        while (sb.length() > 0 && Character.isWhitespace(sb.charAt(0))) {
            sb.deleteCharAt(0);
        }
        while (sb.length() > 0 && Character.isWhitespace(sb.charAt(sb.length() - 1))) {
            sb.deleteCharAt(sb.length() - 1);
        }
        return sb.toString();
    }

    /**
     * 是否支持蓝牙4.0
     */
    public static boolean isBLE(Activity activity) {
        // 检测设备是否支持ble
        if (!activity.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
            GlobalConts.showToast(activity, "该设备不支持ble");
            return false;
        }
        return true;
    }

    public void setmaxlength(EditText edittext, final double max, double min) {
        edittext.setOnEditorActionListener(new OnEditorActionListener() {

            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                // TODO Auto-generated method stub
                String strdlsj = v.getText().toString();
                if (Double.parseDouble(v.getText().toString()) < max) {

                } else {
                    // v.setText(strdlsj);
                }

                return false;
            }
        });
    }

    /**
     * 计算 血清低密度脂蛋白胆固醇
     *
     * @param tc  总胆固醇
     * @param tg  甘油三酯
     * @param hdl 血清高密度脂蛋白胆固醇
     * @return
     * @author 鹿云龙
     * @date 2016年1月14日 下午4:52:15
     */
    public static double calcLdl(double tc, double tg, double hdl) {
        double ldl = tc - hdl - (tg / 2.2);
        return ldl;
    }

    public static void showTextDialog(Context ctx, String text) {
        if (textDialog == null) {
            textDialog = new NovaTextDialog(ctx);
        }
        textDialog.setText(text);
        textDialog.show();
    }

    public static void checkNum(final Context ctx, final EditText ed_zq, final double max, final double min,
                                final double orangeMax, final double orangeMin) {

        ed_zq.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                String str_yc = ed_zq.getText().toString();
                if (!TextUtils.isEmpty(str_yc)) {
                    double int_yc = Double.parseDouble(str_yc);
                    if (int_yc < orangeMin) {
                        ed_zq.setBackgroundColor(ctx.getResources().getColor(R.color.orange));
                    } else if (int_yc > orangeMax) {
                        ed_zq.setBackgroundColor(ctx.getResources().getColor(R.color.orange));
                    } else if (int_yc > max || int_yc < min) {
                        ed_zq.setBackgroundColor(Color.YELLOW);
                    } else {
                        ed_zq.setBackgroundColor(Color.WHITE);
                    }

                } else {
                    ed_zq.setBackgroundColor(Color.WHITE);
                }
            }
        });
    }

    /**
     * 验证EditText 控件数值在0-49
     *
     * @param ed_zq
     * @author 王婷婷
     * @date 2016年2月3日 上午11:10:15
     */
    public static void checkNum(final Context ctx, final EditText ed_zq, final double max, final double min,
                                final double orangeMax) {

        ed_zq.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                String str_yc = ed_zq.getText().toString();
                if (!TextUtils.isEmpty(str_yc)) {
                    double int_yc = Double.parseDouble(str_yc);
                    if (int_yc > orangeMax) {
                        ed_zq.setBackgroundColor(ctx.getResources().getColor(R.color.orange));
                    } else if (int_yc > max || int_yc < min) {
                        ed_zq.setBackgroundColor(Color.YELLOW);
                    } else {
                        ed_zq.setBackgroundColor(Color.WHITE);
                    }

                } else {
                    ed_zq.setBackgroundColor(Color.WHITE);
                }
            }
        });
    }

    public static boolean getCheckNumBoolean(final Context ctx, final EditText ed_zq, final double max,
                                             final double min, final double orangeMax) {
        String str_yc = ed_zq.getText().toString();
        try {
            if (!TextUtils.isEmpty(str_yc) && !".".equals(str_yc)) {
                double int_yc = Double.parseDouble(str_yc);
                if (int_yc > orangeMax) {
                    return false;
                } else if (int_yc > max || int_yc < min) {
                    return true;
                } else {
                    return true;
                }

            } else {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

    }

    /**
     * 验证EditText 控件数值在0-49
     *
     * @param ed_zq
     * @author 王婷婷
     * @date 2016年2月3日 上午11:10:15
     */
    public static void checkNumOrange(final Context ctx, final EditText ed_zq, final double max, final double min) {
        ed_zq.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                String str_yc = s.toString();
                try {
                    System.out.println("str_yc" + str_yc);
                    if (!TextUtils.isEmpty(str_yc) && !".".equals(str_yc)) {
                        double int_yc = Double.parseDouble(str_yc);
                        if (int_yc > max || int_yc < min) {
                            ed_zq.setBackgroundColor(ctx.getResources().getColor(R.color.orange));
                        } else {
                            ed_zq.setBackgroundColor(Color.WHITE);
                        }

                    } else {
                        ed_zq.setBackgroundColor(Color.WHITE);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        });
    }

    public static boolean getCheckNumOrangeBoolean(final Context ctx, final EditText ed_zq, final double max,
                                                   final double min) {
        String str_yc = ed_zq.getText().toString();
        try {
            if (!TextUtils.isEmpty(str_yc) && !".".equals(str_yc)) {
                double int_yc = Double.parseDouble(str_yc);
                if (int_yc > max || int_yc < min) {
                    return false;
                } else {
                    return true;
                }

            } else {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

    }

    /**
     * 新生儿访视：新生儿出生体重，身长，目前体重
     */
    public static void checkXSEFS(final Context context, final EditText editText, final Double max,
                                  final String message) {
        editText.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable s) {
                if (!TextUtils.isEmpty(editText.getText()) && Double.parseDouble(editText.getText().toString()) > max) {
                    GlobalConts.showTextDialog(context, message);
                    editText.setBackgroundColor(context.getResources().getColor(R.color.orange));
                } else {
                    editText.setBackgroundColor(context.getResources().getColor(R.color.white));
                }

            }
        });
    }

    /**
     * 验证EditTextWithDate ed_before<ed_after
     *
     * @author 王婷婷
     * @date 2016年2月3日 上午11:10:15
     */
    public static void checkDateAfter(final EditTextWithDate ed_before, final EditTextWithDate ed_after) {
        String str_date = ed_before.getText().toString();
        if (!TextUtils.isEmpty(str_date)) {
            try {
                ed_after.setAfter(dateFormat.parse(str_date));
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        ed_before.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                String str_date = ed_before.getText().toString();
                if (!TextUtils.isEmpty(str_date)) {
                    try {
                        ed_after.setAfter(dateFormat.parse(str_date));
                    } catch (ParseException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }

    /**
     * 验证EditText 最多允许输入两位小数
     *
     * @author 王婷婷
     * @date 2016年2月3日 上午11:10:15
     */
    public static void keep2decimal(final EditText ed_text) {
        ed_text.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                String text = s.toString();
                if (text.contains(".")) {
                    int index = text.indexOf(".");
                    if (index + 3 < text.length()) {
                        text = text.substring(0, index + 3);
                        ed_text.setText(text);
                        ed_text.setSelection(text.length());
                    }
                }
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // TODO Auto-generated method stub
                ed_text.getDrawingCacheBackgroundColor();
            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub

            }
        });
    }

    /**
     * 验证EditText 最多允许输入两位小数
     *
     * @author 王婷婷
     * @date 2016年2月3日 上午11:10:15
     */
    public static void keep2decimal(final EditText... ed_text) {

        if (ed_text != null) {
            for (final EditText et : ed_text) {
                if (et != null) {
                    et.addTextChangedListener(new TextWatcher() {

                        @Override
                        public void onTextChanged(CharSequence s, int start, int before, int count) {
                            String text = s.toString();
                            if (text.contains(".")) {
                                int index = text.indexOf(".");
                                if (index + 3 < text.length()) {
                                    text = text.substring(0, index + 3);
                                    et.setText(text);
                                    et.setSelection(text.length());
                                }
                            }
                        }

                        @Override
                        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                            // TODO Auto-generated method stub
                            et.getDrawingCacheBackgroundColor();
                        }

                        @Override
                        public void afterTextChanged(Editable s) {
                            // TODO Auto-generated method stub

                        }
                    });
                }
            }
        }
    }

    /**
     * 医生列表
     */
    public static void doctorList(NiceSpinner doctorSpinner) {
        if (NovaApplication.getDoctorList() != null) {
            if (NovaApplication.getDoctorList().size() > 0) {
                doctorSpinner.attachDataSource(getDataInfo1(NovaApplication.getDoctorList()));
            }

        }

    }

    /**
     * 获取下拉框中需要的数据的信息（医生列表）
     */
    private static ArrayList<String> getDataInfo1(List<BD_ORGANIZE_EMPLOYEE> datas) {
        ArrayList<String> infos = new ArrayList<String>();
        for (BD_ORGANIZE_EMPLOYEE bd : datas) {
            infos.add(bd.getNAME());
        }
        return infos;
    }

    /**
     * exitApp退出程序
     */
    public static void exitApp(final Context context) {
        /** 监听对话框里面的button点击事件 */
        DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                switch (which) {
                    case AlertDialog.BUTTON_POSITIVE:// "确认"按钮退出程序
                        // BluetoothManager bluetoothManager = (BluetoothManager)
                        // context
                        // .getSystemService(Context.BLUETOOTH_SERVICE);
                        // BluetoothAdapter mBluetoothAdapter =
                        // bluetoothManager.getAdapter();
                        // if (mBluetoothAdapter != null &&
                        // NovaApplication.isBluetoothOpen == true) {
                        // mBluetoothAdapter.disable();
                        // }
                        NovaApplication.dbManger.db.close();
                        ActivityManager.finishAll();
                        // if (NovaApplication.idCardTool != null) {
                        // NovaApplication.idCardTool.unRedisterReceiver();
                        // }
                        //
                        // if (NovaApplication.bloothTool != null) {
                        // NovaApplication.bloothTool.closeAndExit();
                        // }
                        System.exit(0);

                        break;
                    case AlertDialog.BUTTON_NEGATIVE:// "取消"第二个按钮取消对话框
                        break;
                    default:
                        break;
                }
            }
        };
        // 创建退出对话框
        AlertDialog isExit = new AlertDialog.Builder(context).create();
        // 设置对话框标题
        // isExit.setTitle("系统提示");
        // 设置对话框消息
        isExit.setMessage("确定要退出吗");
        // 添加选择按钮并注册监听
        isExit.setButton("确定", listener);
        isExit.setButton2("取消", listener);
        // 显示对话框
        isExit.show();

    }

    private static ProgressDialog dialog;

    public static void showProgressDialog(Context context) {
        showProgressDialog(context, "正在上传，请稍候");
    }

    public static void showProgressDialog(Context context, String msg) {
        try {
            dialog = new ProgressDialog(context, ProgressDialog.THEME_HOLO_LIGHT);
            // dialog.setIcon(R.drawable.em_logo_uidemo);
            // dialog.setTitle(R.string.app_name);
            dialog.setCanceledOnTouchOutside(false);
            dialog.setOnCancelListener(new OnCancelListener() {

                @Override
                public void onCancel(DialogInterface dialog) {
                }
            });
            dialog.setMessage(msg);
            dialog.show();
            dialog.setCanceledOnTouchOutside(false);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void closeProgressDialog() {
        if (dialog != null && dialog.isShowing()) {
            dialog.dismiss();
        }
    }

    // 以下部自动升级使用
    // 取代码版本
    public static int getVerCode(Context context) {
        int verCode = -1;
        try {
            verCode = context.getPackageManager().getPackageInfo("com.health", 0).versionCode;
        } catch (NameNotFoundException e) {

        }
        return verCode;
    }

    // 以下部自动升级使用
    // 取代码版本名称
    public static String getVerName(Context context) {
        String verName = "";
        try {
            verName = context.getPackageManager().getPackageInfo("com.health", 0).versionName;
        } catch (NameNotFoundException e) {

        }
        return verName;
    }

    // 华清心电----------
    public final static String ECG_PATH_XML = "/ECGDATA/XML/";
    public final static String ECG_PATH_JPEG = "/ECGDATA/JPEG/";

    /**
     * 指定目录下的文件
     *
     * @param path
     * @return
     * @author 王婷婷
     * @date 2017年3月20日 上午11:58:57
     */
    public static List<Map<String, Object>> listFiles(String path) {

        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        // 判断是否有外存储设备

        if (Environment.getExternalStorageState().equals(

                Environment.MEDIA_MOUNTED)) {

            Log.w("XML----- ", path);
            File filePath = new File(path);
            if (!filePath.exists()) {
                Log.w("XML----- ", "文件不存在---");
                return list;
            }
            File[] files = filePath.listFiles();
            if (files.length > 0) {
                String fileName = "";
                for (File file : files) {
                    Map<String, Object> map = new HashMap<String, Object>();

                    fileName = file.getName();

                    // 获取.xml后缀的文件

                    if (fileName.endsWith(".xml")) {

                        map.put("text_content", file.getName()); // get filename
                        Log.w("XML----- ", file.getName());
                        list.add(map);
                    }

                }
            }

            // getFileName(files);

        }
        return list;

    }

    /**
     * 获取最新修改的文件名
     *
     * @param path
     * @return
     * @author 王婷婷
     * @date 2017年3月20日 上午11:59:31
     */

    public static String getLastModifiedName(String path) {

        String fileName = "";
        // 判断是否有外存储设备
        long lastModified = 0l;// 最后一次修改时间
        if (Environment.getExternalStorageState().equals(

                Environment.MEDIA_MOUNTED)) {
            Log.w("XML-----eeeeeeeeee", path);
            File filePath = new File(path);
            if (!filePath.exists()) {
                Log.w("XML-----eeeeeeeeeeeee", "文件不存在---");
                return fileName;
            }
            File lastFile = null;// 最新修改的文件

            File[] files = filePath.listFiles();
            if (files.length > 1) {
                // 默认有个.txt文件

                for (File file : files) {
                    Map<String, Object> map = new HashMap<String, Object>();

                    fileName = file.getName();

                    // 获取.xml后缀的文件

                    if (fileName.endsWith(".xml")) {
                        // 当前文件的修改时间比上次的更大就将最新修改时间记录为当前文件的修改时间。以便下一次比较

                        if (file.lastModified() > lastModified) {
                            lastModified = file.lastModified();
                            lastFile = file;
                        }

                        Log.w("XML-----", fileName);
                    }

                }
                fileName = lastFile.getName();
            } else {
                // 没有文件
                fileName = "";
            }

            // getFileName(files);

        }
        return fileName;

    }

    /**
     * 获取日期的下一天
     *
     * @param date
     * @return
     * @author 王婷婷
     * @date 2017年4月1日 上午11:03:04
     */
    public static Date getNextDate(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, 1);
        Date date1 = new Date(calendar.getTimeInMillis());
        return date1;
    }

    public static String getUUID() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }

    /**
     * 获取日期数据
     *
     * @param strDate
     * @return
     * @author 王婷婷
     * @date 2017年4月27日 下午7:40:54
     */
    public static String getDateName(String strDate) {

        return strDate.contains("00:00:00") ? strDate : (strDate + " 00:00:00");
    }

    /**
     * 设置日期数据
     *
     * @param strDate
     * @return
     * @author 王婷婷
     * @date 2017年4月27日 下午7:40:54
     */
    public static String setDateName(String strDate) {

        return strDate.contains("00:00:00") ? strDate.replace(" 00:00:00", "") : strDate;
    }

    // /**
    // * 生成设备唯一标识码
    // *
    // * @param ctx
    // * @return
    // * @author 王婷婷
    // * @date 2016年4月18日 上午11:50:52
    // */
    // public static String generateIMEI(Context ctx) {
    // String str_imei = "";
    //
    // // TelephonyManager TelephonyMgr = (TelephonyManager)
    // // ctx.getSystemService(ctx.TELEPHONY_SERVICE);
    // // String m_szImei = TelephonyMgr.getDeviceId();
    // // Log.w("IMEI", m_szImei);
    //
    // // String m_szDevIDShort = "35" + // we make this look like a valid IMEI
    // //
    // // Build.BOARD.length() % 10 + Build.BRAND.length() % 10 +
    // // Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10
    // // + Build.DISPLAY.length() % 10 + Build.HOST.length() % 10 +
    // // Build.ID.length() % 10
    // // + Build.MANUFACTURER.length() % 10 + Build.MODEL.length() % 10 +
    // // Build.PRODUCT.length() % 10
    // // + Build.TAGS.length() % 10 + Build.TYPE.length() % 10 +
    // // Build.USER.length() % 10; // 13
    // // // digits
    // // Log.w("Pseudo-Unique ID", m_szDevIDShort);
    //
    // // String m_szAndroidID = Secure.getString(ctx.getContentResolver(),
    // // Secure.ANDROID_ID);
    // //
    // // Log.w("m_szAndroidID", m_szAndroidID);
    //
    // WifiManager wm = (WifiManager)
    // ctx.getSystemService(Context.WIFI_SERVICE);
    // String m_szWLANMAC = wm.getConnectionInfo().getMacAddress();
    // Log.w("m_szWLANMAC", m_szWLANMAC);
    //
    // BluetoothAdapter m_BluetoothAdapter = null; // Local Bluetooth adapter
    // m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    // String m_szBTMAC = m_BluetoothAdapter.getAddress();
    // Log.w("m_szBTMAC", m_szBTMAC);
    //
    // // 存储log日志跟踪
    // // FileHelper fileHelper = new FileHelper(ctx);
    // // try {
    // // fileHelper.createSDFile(LOG_TXT);
    // // //\nIMEI: " + m_szImei
    // // String str_content = simdf.format(new Date()) +
    // // "\n---------------------"
    // // + "\nPseudo-Unique ID: " + m_szDevIDShort + "\nAndroidID: " +
    // // m_szAndroidID + "\nWLANMAC: "
    // // + m_szWLANMAC + "\nBTMAC: " + m_szBTMAC +
    // // "\n*********************************************\n";
    // // boolean f = fileHelper.writeSDFile(str_content, LOG_TXT);
    // // Log.w("是否写入成功", "" + f);
    // // // Log.w("dddddddddddddddfffffffff",
    // // // fileHelper.readSDFile(LOG_TXT));
    // // } catch (IOException e1) {
    // // // TODO Auto-generated catch block
    // // e1.printStackTrace();
    // // }
    //
    // // String m_szLongID = m_szImei + m_szDevIDShort + m_szAndroidID +
    // // m_szWLANMAC + m_szBTMAC;
    //
    // String m_szLongID = m_szWLANMAC;
    // // compute md5
    // MessageDigest m = null;
    // try {
    // m = MessageDigest.getInstance("MD5");
    // } catch (NoSuchAlgorithmException e) {
    // e.printStackTrace();
    // }
    // m.update(m_szLongID.getBytes(), 0, m_szLongID.length());
    // // get md5 bytes
    // byte p_md5Data[] = m.digest();
    // // create a hex string
    // String m_szUniqueID = new String();
    // for (int i = 0; i < p_md5Data.length; i++) {
    // int b = (0xFF & p_md5Data[i]);
    // // if it is a single digit, make sure it have 0 in front (proper
    // // padding)
    // if (b <= 0xF)
    // m_szUniqueID += "0";
    // // add number to string
    // m_szUniqueID += Integer.toHexString(b);
    // } // hex string to uppercase
    // m_szUniqueID = m_szUniqueID.toUpperCase();
    // str_imei = m_szUniqueID;
    // return str_imei;
    // }

    /**
     * 获取设备序列号
     *
     * @param ctx
     * @return
     */
    public static String generateIMEI(Context ctx) {
        String code = null;
//        try {
//            WifiManager wm = (WifiManager) ctx.getSystemService(Context.WIFI_SERVICE);
//            String m_szWLANMAC = wm.getConnectionInfo().getMacAddress();
//            if (null == m_szWLANMAC) {
//                return null;
//            } else {
//                Log.w("m_szWLANMAC", m_szWLANMAC);
//                code = MD5(m_szWLANMAC).toUpperCase();
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//            return null;
//        }
        String androidID =Settings.Secure.getString(ctx.getContentResolver(), Settings.Secure.ANDROID_ID);
        String id = androidID + Build.SERIAL;
        if (!TextUtils.isEmpty(id)){
            try {
                code = MD5(id).toUpperCase();
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
//        code="CEE5393A910924EB";
        return code;
    }

    /**
     * 获取16位序列号
     *
     * @param sourceStr
     * @return
     * @throws Exception
     */
    private static String MD5(String sourceStr) throws Exception {
        String result = "";
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(sourceStr.getBytes());
            byte b[] = md.digest();
            int i;
            StringBuffer buf = new StringBuffer("");
            for (int offset = 0; offset < b.length; offset++) {
                i = b[offset];
                if (i < 0) {
                    i += 256;
                }
                if (i < 16) {
                    buf.append("0");
                }
                buf.append(Integer.toHexString(i));
            }
            result = buf.toString().substring(8, 24);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return result;
    }

    private final static DecimalFormat df = new DecimalFormat("0.##");

    /**
     * 获取完整度和缺项值
     *
     * @param datas 考核项字段值
     * @return String[]{完整度,缺项值}
     */
    public synchronized static String[] assessIntegrity(String... datas) {
        if (null == datas || datas.length == 0) {
            // throw new RuntimeException("datas not null");
            return new String[]{"0", "0"};
        }
        double wzd = 0;
        double qxz = 0;
        double dataSize = datas.length;
        for (String data : datas) {
            if (TextUtils.isEmpty(data)) {
                qxz += 1;
            }
        }
        if (qxz != 0) {
            wzd = (qxz / dataSize) * 100;
        } else {
            wzd = 100;
        }
        return new String[]{df.format(wzd), df.format(qxz)};
    }

    /**
     * @param type   需要校验的数据分类
     * @param number 需要校验的数据
     * @return
     */
    public static boolean isRightNumber(String type, String number) {
        if (TextUtils.isEmpty(number)) {
            return false;
        }

        double num = Double.valueOf(number);

        if ("身高".equals(type)) {
            return checkNum(num, 0, 350);
        } else if ("体重".equals(type)) {
            return checkNum(num, 0, 250);
        } else if ("血糖".equals(type)) {
            return checkNum(num, 1.1, 33.3);
        } else if ("血压".equals(type)) {
            return checkNum(num, 0, 299);
        } else if ("血氧".equals(type)) {
            return checkNum(num, 0, 100);
        } else if ("脉率".equals(type)) {
            return checkNum(num, 30, 250);
        } else if ("体温".equals(type)) {
            return checkNum(num, 34, 42.9);
        } else if ("体质指数".equals(type)) {
            return checkNum(num, 0, 99.9);
        }

        return false;

    }

    /**
     * @param num 校验的数据
     * @param min 最小取值
     * @param max 最大取值
     * @return
     */
    private static boolean checkNum(double num, double min, double max) {
        if (num < min || num > max) {
            return false;
        } else {
            return true;
        }
    }

    /**
     * 获取字典值
     *
     * @param context 上下文
     * @param where   查询条件
     * @return 数据
     */
    public static List<BD_DD_INFO> getDictionaryValue(Context context, String where) {
        List<BD_DD_INFO> lsttl = null;
        if (!TextUtils.isEmpty(where)) {
            lsttl = FDbManager.getInstance(context).findAllByWhereInInfoDB(BD_DD_INFO.class,
                    "PARENTID = '" + where + "' order by cast(SORT as int) asc");
        } else {
            lsttl.add(new BD_DD_INFO());
        }
        return lsttl;
    }

    /**
     * 限制输入内容的整数和小数各自默认的长度
     *
     * @param view 要限制的组件
     * @return 数据
     */
    public static void restrictionLength(View... view) {
        restrictionLength(2, 2, view);
    }

    /**
     * 限制输入内容小数长度
     *
     * @param decimalsLength 限制小数位数
     * @param view           要限制的组件
     */
    public static void restrictionLength(int decimalsLength, View... view) {
        restrictionLength(-1, decimalsLength, view);
    }

    /**
     * * 限制输入内容的整数和小数各自的长度
     *
     * @param integerLength  整数长度
     * @param decimalsLength 小数长度
     * @param view           要限制的组件
     */
    public static void restrictionLength(int integerLength, int decimalsLength, View... view) {
        for (View item : view) {
            if (item instanceof TextView) {
                if (-1 == integerLength) {
                    ((TextView) item).addTextChangedListener(new DecimalInputTextWatcher(item, decimalsLength));
                } else {
                    ((TextView) item).addTextChangedListener(new DecimalInputTextWatcher(item, integerLength, decimalsLength));
                }
            } else if (item instanceof EditText) {
                if (-1 == integerLength) {
                    ((EditText) item).addTextChangedListener(new DecimalInputTextWatcher(item, decimalsLength));
                } else {
                    ((EditText) item).addTextChangedListener(new DecimalInputTextWatcher(item, integerLength, decimalsLength));
                }
            }
        }
    }


    /**
     * <p>
     * 功能 获取屏幕宽度
     * </p>
     *
     * @param context
     * @return 屏幕宽度 单位：像素
     */
    public static int getWidthPixels(Context context) {
        if (NovaApplication.screenWidth <= 0) {
            initWindowSize(context);
        }
        return NovaApplication.screenWidth;
    }

    /**
     * <p>
     * 功能 获取屏幕高度
     * </p>
     *
     * @param context
     * @return 屏幕高度 单位：像素
     */
    public static int getHeightPixels(Context context) {
        if (NovaApplication.screenHeight <= 0) {
            initWindowSize(context);
        }
        return NovaApplication.screenHeight;
    }

    /**
     * <p>
     * 功能 初始化屏幕大小数据
     * </p>
     *
     * @param context
     */
    private static void initWindowSize(Context context) {
        DisplayMetrics dm = context.getResources().getDisplayMetrics();
        NovaApplication.screenWidth = dm.widthPixels;
        NovaApplication.screenHeight = dm.heightPixels;
    }


}